package com.ruoyi.system.xmlAbstract.dto;

import cn.hutool.core.collection.CollectionUtil;
import com.ruoyi.common.utils.StringUtils;
import lombok.Data;
import lombok.ToString;

import java.util.ArrayList;
import java.util.List;

/**
 * 使用组合模式来代替树结构
 * @author : anxinr
 * @date : 2023/1/11 17:39
 */
@Data
@ToString
public class XmlNodeBuildDto {
    /**结点名称*/
    private String xmlNode ;
    /**结点参数  h5  专用*/
    private String xmlH5NodeParam ;
    /**结点数据*/
    private String xmlNodeData ;
    /**子节点*/
    private List<XmlNodeBuildDto> list = new ArrayList<>();

    public XmlNodeBuildDto() {
    }

    public XmlNodeBuildDto(String xmlNodeCode ,String xmlH5NodeParam,String xmlNodeData) {
        this.xmlNode = xmlNodeCode ;
        this.xmlNodeData = xmlNodeData ;
        this.xmlH5NodeParam = xmlH5NodeParam ;
    }

    public XmlNodeBuildDto(String xmlNodeCode, String xmlNodeData) {
        this.xmlNode = xmlNodeCode ;
        this.xmlNodeData = xmlNodeData ;
    }

    /**
     * 生成xml头信息
     * @return Exception
     * @throws Exception
     */
    public String generateHead() throws Exception {
        StringBuilder sb = new StringBuilder();
       sb.append("<").append(this.xmlNode).append(">");
       if (CollectionUtil.isNotEmpty(this.list) && org.apache.commons.lang3.StringUtils.isNotBlank(this.xmlNodeData)){
           throw new Exception("该结点数据格式错误，数据和子节点同时存在！") ;
       }
       /**如果这个xml有数据*/
       if (CollectionUtil.isEmpty(this.list) && org.apache.commons.lang3.StringUtils.isNotBlank(this.xmlNodeData)){
           sb.append(this.xmlNodeData) ;
       }
        return sb.toString() ;
    }

    /**
     * 生成xml头信息
     * @return Exception
     * @throws Exception
     */
    public String generateH5Head() throws Exception {
        StringBuilder sb = new StringBuilder();
        sb.append("<").append(this.xmlNode).append(StringUtils.isBlank(this.xmlH5NodeParam) ? "" : this.xmlH5NodeParam).append(">");
        if (CollectionUtil.isNotEmpty(this.list) && org.apache.commons.lang3.StringUtils.isNotBlank(this.xmlNodeData)){
            throw new Exception("该结点数据格式错误，数据和子节点同时存在！") ;
        }
        /**如果这个xml有数据*/
        if (CollectionUtil.isEmpty(this.list) && org.apache.commons.lang3.StringUtils.isNotBlank(this.xmlNodeData)){
            sb.append(this.xmlNodeData) ;
        }
        return sb.toString() ;
    }

    /**
     * 生成xml结尾信息
     * @return String
     */
    public String generateHeadEnd(){
        StringBuilder sb = new StringBuilder();
        sb.append("<").append("/").append(this.xmlNode).append(">");
        return sb.toString() ;
    }
}
